package com.design.working.dao;

import com.design.working.dto.StudentWorkApplicationDTO;
import com.design.working.dto.StudentWorkMotionDTO;
import com.design.working.dto.student.UpdateIndividualInformationDTO;
import com.design.working.po.student.SelectAllWorkPO;
import com.design.working.po.student.StudentSalaryPO;
import com.design.working.vo.student.IndividualInformationByUidVO;
import com.design.working.po.student.StudentWorkApplicationRecordPO;
import com.design.working.vo.student.JobSelectionVO;
import com.design.working.vo.student.StudentCurrentWorkVO;
import com.design.working.vo.student.StudentWorkAttendanceVO;

import java.util.List;

/**
 * 学生端
 *
 * @author gavin
 * @date 2022/5/9 12:00
 */
public interface StudentDAO {

    /**
     * （申请岗位）查找全部岗位
     *
     * @param place 需要查询的岗位所属的行政分类（job_category）
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 查询到的岗位
     */
    List<JobSelectionVO> selectJob(String place, Integer page, Integer limit);

    /**
     * 查询学生是否有在申请的岗位
     *
     * @param uid 学生学号
     * @return true-有; false-没有
     */
    boolean isStudentInApplying(Integer uid);

    /**
     * 查询学生是否有工作
     *
     * @param uid 学生学号
     * @return true-有; false-没有
     */
    boolean isStudentInWorking(Integer uid);

    /**
     * 插入学生申请的岗位
     *
     * @param uid                       学生学号
     * @param studentWorkApplicationDTO 前端表单传来的信息
     */
    void insertStudentWorkApplication(Integer uid, StudentWorkApplicationDTO studentWorkApplicationDTO);

    /**
     * 查询学生目前在岗岗位
     *
     * @param uid 要查询的学生学号
     * @return 学生在岗岗位
     */
    List<StudentCurrentWorkVO> selectCurrentWork(Integer uid);

    /**
     * 查询学生所有的用工岗位
     *
     * @param uid   学生学号
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 学生所有的用工岗位
     */
    List<SelectAllWorkPO> selectAllWork(Integer uid, Integer page, Integer limit);

    /**
     * 查询学生的考勤记录
     *
     * @param id    student_to_work的id
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 对应工作的考勤记录
     */
    List<StudentWorkAttendanceVO> selectAttendanceById(Integer id, Integer page, Integer limit);

    /**
     * 插入学生申请岗位变更数据
     *
     * @param studentWorkMotionDTO 前端传来的申请数据
     */
    void insertStudentWorkMotion(StudentWorkMotionDTO studentWorkMotionDTO);

    /**
     * 查询学生所有的岗位记录
     *
     * @param uid   学生学号
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 该生的所有申请岗位记录
     */
    List<StudentWorkApplicationRecordPO> selectAllWorkApplication(Integer uid, Integer page, Integer limit);


    /**
     * 查询学生上个月工资
     *
     * @param uid   学生学号
     * @param type  all-查询历史工资；lastMonth-上个月工资
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 该生上个月的工资
     */
    List<StudentSalaryPO> selectSalary(Integer uid, String type, Integer page, Integer limit);

    /**
     * 通过学号查询个人信息
     *
     * @param uid 学号
     * @return 相关的个人信息
     */
    IndividualInformationByUidVO selectIndividualInformationByUid(Integer uid);

    /**
     * 通过学生学号uid更新个人信息
     *
     * @param uid                            学生学号
     * @param updateIndividualInformationDTO 更新的数据
     */
    void updateIndividualInformationByUid(Integer uid, UpdateIndividualInformationDTO updateIndividualInformationDTO);

}
